#pragma once

#include <QObject>

#include <QJsonObject>
#include <QWidget>
#include <QList>

class Question : public QObject
{
    Q_OBJECT
public:
    // 题型常量定义
    static const int TYPE_SINGLE_CHOICE = 1;
    static const int TYPE_JUDGE = 2;
    static const int TYPE_UNKNOWN = 0;
    
    enum QuestionType {
        SingleChoice,
        TrueFalse,
        Unknown
    };
    Q_ENUM(QuestionType)

    explicit Question(QObject *parent = nullptr);
    //virtual ~Question() = default;


    // 纯虚函数
    virtual bool fromJson(const QJsonObject &json) = 0;
    // 添加toJson方法声明
    virtual QJsonObject toJson() const ; // 纯虚函数
    //为各题创建新窗口 --- 这不美观
    virtual QWidget *createWidget(QWidget *parent = nullptr) = 0;

    //公共属性
    // 公共属性
    int id() const { return m_id; }
    QString stem() const { return m_stem; }
    QString typeString() const{return m_typeString;}
    int typeId() const { return m_typeId; } // 新增：获取题型ID
    //QuestionType type() const { return m_type; }

    // 获取用户答案
    QString userAnswer() const { return m_userAnswer; }

    void setUserAnswer(const QString &answer);

signals:
    void answerChanged(); // 答案变更信号（新增）

protected:
    //数据解析  --- 到什么程度？
    void parseCommonData(const QJsonObject &json);


    int m_id;
    QString m_stem;
    QString m_typeString;
    QString m_userAnswer;
    QuestionType m_type = Unknown;
    int m_typeId = TYPE_UNKNOWN; // 新增：题型ID，默认未知类型



};
